package com.wzdigit.wms.basic.mapper.core.transfer;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzdigit.framework.orm.mybatis.MyBatisRepository;
import com.wzdigit.wms.basic.domain.transfer.InvZone;
import com.wzdigit.wms.basic.client.request.transfer.SearchInvRequest;
import com.wzdigit.wms.basic.client.response.transfer.AvailableInvZoneByWhsResponse;
import com.wzdigit.wms.basic.client.response.transfer.AvailableInvZoneGroupWhsResponse;
import com.wzdigit.wms.basic.client.response.transfer.InvQtyAndOutQtyResponse;
import com.wzdigit.wms.basic.client.response.transfer.InvZoneListResponse;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 用于存放库区级别库存信息 Mapper 接口
 * 可用数量：QTY（库存数量） - PRE_OUT_QTY（预支数量） - HOLD_QTY（冻结数量） - ALOC_QTY（分配数量）
 * </p>
 *
 * @author 
 * @since 2021-02-24
 */
@MyBatisRepository
public interface InvZoneMapper extends BaseMapper<InvZone> {

	List<InvZoneListResponse> selectAll(@Param("dto") SearchInvRequest dto,
			@Param("poNo") String poNo, @Param("soNo") String soNo,
			@Param("soItem") String soItem, @Param("filter") String filter);

	List<InvZoneListResponse> selectAllNew(@Param("dto") SearchInvRequest dto,
										@Param("poNo") String poNo, @Param("soNo") String soNo,
										@Param("soItem") String soItem, @Param("whsType") String whsType, @Param("filter") String filter);
	
	// 查询库区库存的数量和支出数量
	List<InvQtyAndOutQtyResponse> getQtyAndOutQty(@Param("dto") SearchInvRequest dto);
	
	// 获取可用库存数（指定仓库）
	List<AvailableInvZoneByWhsResponse> getAvailableInvZoneByWhs(@Param("dto") SearchInvRequest dto);
		
	// 获取可用库存数（仓库分组），指定用户权限的仓库
	List<AvailableInvZoneGroupWhsResponse> getAvailableInvZoneGroupWhs(@Param("dto") SearchInvRequest dto, 
			@Param("whsIdList") List<Integer> whsIdList, @Param("whsTypeList") List<Integer> whsTypeList);
	
    int updateQtyById(@Param("id") Integer id,
					   @Param("qty") BigDecimal qty,
					   @Param("holdQty") BigDecimal holdQty,
					   @Param("alocQty") BigDecimal alocQty,
					   @Param("preInQty") BigDecimal preInQty,
					   @Param("preOutQty") BigDecimal preOutQty,
					   @Param("preAlocQty") BigDecimal preAlocQty,
					   @Param("operator") String operator);

	int updateCuntLocZone(Integer invZoneId, BigDecimal qty, String operator);
}
